/**
* @Title: JConfig.java
* @Package com.an.beetl_jfinal_blog
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月5日 下午9:57:49
* @version V1.0
*/

package com.an.beetl_jfinal_blog;

import java.util.Date;

import org.beetl.core.GroupTemplate;
import org.beetl.ext.jfinal3.JFinal3BeetlRenderFactory;

import com.an.jfinal.activerecord.DbRecordController;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.ext.interceptor.SessionInViewInterceptor;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.template.Engine;

/**
 * @ClassName: JConfig
 * @Description: TODO(Jfinal通用配置)
 * @author antch,861710865@qq.com
 * @date 2017年7月5日 下午9:57:49
 *
 */

public class JConfig extends JFinalConfig {

	@Override
	public void configConstant(Constants me) {
		// TODO 配置常量
		PropKit.use("config.properties"); // 加载少量必要配置，随后可用PropKit.get(...)获取值

		me.setDevMode(PropKit.getBoolean("devMode", false));
		JFinal3BeetlRenderFactory rf = new JFinal3BeetlRenderFactory();
		rf.config();
		me.setRenderFactory(rf);

		@SuppressWarnings("unused")
		GroupTemplate gt = rf.groupTemplate;
		// 根据gt可以添加扩展函数，格式化函数，共享变量等，

	}

	@Override
	public void configRoute(Routes me) {
		// TODO 配置路由
		me.add("/", CommonController.class);
		me.add("/blog", BlogController.class);

		//添加路由，测试db record类的使用
		me.add("/dbr", DbRecordController.class);



	}

	@Override
	public void configEngine(Engine me) {
		// TODO Auto-generated method stub

	}

	@Override
	public void configPlugin(Plugins me) {
		// TODO 配置数据库连接池插件
		C3p0Plugin c3p0Plugin = createC3p0Plugin();
		me.add(c3p0Plugin);

		// 配置ActiveRecord插件,在应用中使用 ActiveRecord 非常方便地操作数据库
		ActiveRecordPlugin recordPlugin = new ActiveRecordPlugin(c3p0Plugin);
		recordPlugin.setDevMode(true);
		recordPlugin.setDialect(new MysqlDialect());
		me.add(recordPlugin);

		recordPlugin.addMapping("blog", Blog.class);// 映射

	}

	@Override
	public void configInterceptor(Interceptors me) {
		// TODO 配置全局拦截器
		// 支持jfinal中使用session
		me.add(new SessionInViewInterceptor());

	}

	@Override
	public void configHandler(Handlers me) {
		// TODO 配置处理器

	}

	/**
	 * 当未添加日志配置文件时，出现无法启动服务器情况
	 */
	@Override
	public void afterJFinalStart() {
		// TODO Auto-generated method stub
		super.afterJFinalStart();
		System.out.println("**服务器启动成功**");
		System.out.println("当前时间：" + new Date());
	}

	/**
	 *
	* @Title: main
	* @Description: TODO(启动项目)
	* @param @param args    设定文件
	* @return void    返回类型
	* @throws
	 */
	public static void main(String[] args) {
		/*PropKit.use("config.properties");
		System.out.println("配置文件读取");
		System.out.println("jdbcUrl" + PropKit.get("jdbcUrl"));

		System.out.println("-------------");
		URL url1 = ClassLoader.getSystemResource("");
		System.out.println("路径：：" + url1);
		String proPath = StringUtils.substringBetween(url1.toString(),"file:/", "/target/classes/");
		System.out.println("项目路径：：" + proPath);
		System.out.println("user.dir::" + System.getProperty("user.dir"));
		System.out.println("-------------");*/


		JFinal.start("src/main/webapp", 80, "/", 5);
	}

	/**
	 *
	 * @Title: createC3p0Plugin @Description: TODO(c3p0初始化) @param @return
	 * 设定文件 @return C3p0Plugin 返回类型 @throws
	 */
	public static C3p0Plugin createC3p0Plugin() {
		return new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());

	}
}
